LIBRARY IEEE;
   USE IEEE.STD_LOGIC_1164.ALL;
   USE IEEE.STD_LOGIC_ARITH.ALL;
   USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  
   ENTITY scrambler IS
   PORT( clk,set:  in std_logic;
           din:          in std_logic_vector(17 downto 0);
           dout:         out std_logic_vector(17 downto 0));                 
         END scrambler;       
   ARCHITECTURE BE OF scrambler IS
      
        signal d1_reg:       std_logic_vector(12 downto 0);
        signal d2_reg:       std_logic_vector(5 downto 0);
      --  signal din:       std_logic_vector(9 downto 0);
    BEGIN
      process(clk)
        begin         
          if clk'event and clk='1'  then
           --  din<=di;
             if set='0' then
                d1_reg(12 downto 0)<="1110011010001";
             else
                d1_reg(0)<=d1_reg(12);--d_reg(0) xor d_reg(3);
                d1_reg(12 downto 1)<=d1_reg(11 downto 0); --    d_reg(10 downto 1)<=d_reg(9 downto 0);
             end if;
          end if;         
        end process;           
              dout(0)<=din(0) xor d1_reg(1);
              dout(1)<=din(1) xor d1_reg(2);
              dout(2)<=din(2) xor d1_reg(3);
              dout(3)<=din(3) xor d1_reg(4);
              dout(4)<=din(4) xor d1_reg(5);
              dout(5)<=din(5) xor d1_reg(6);
              dout(6)<=din(6) xor d1_reg(7);
              dout(7)<=din(7) xor d1_reg(8);
              dout(8)<=din(8) xor d1_reg(9);
              dout(9)<=din(9) xor d1_reg(10);
              dout(10)<=din(10) xor d1_reg(11);
              dout(11)<=din(11) xor d1_reg(12);
              dout(12)<=din(12) xor d2_reg(0);
              dout(13)<=din(13) xor d2_reg(1);
              dout(14)<=din(14) xor d2_reg(2);
              dout(15)<=din(15) xor d2_reg(3);
              dout(16)<=din(16) xor d2_reg(4);
              dout(17)<=din(17) xor d2_reg(5);              
        process(clk)
        begin         
          if clk'event and clk='1'  then
             if set='0' then
                d2_reg(3 downto 0)<="1001";
             else
                d2_reg(0)<=d2_reg(0) xor d2_reg(3);
                d2_reg(5 downto 1)<=d2_reg(4 downto 0);
             end if;
          end if;         
        end process;  
             
   end be;